<?php
// +----------------------------------------------------------------------
// | makePHP 
// +----------------------------------------------------------------------
// | Copyright (c) 2009 http://makephp.org All rights reserved.
// +----------------------------------------------------------------------
// | Licensed BSD.(http://www.make.org/BSD-license.txt)
// +----------------------------------------------------------------------
// | Author: 叁石(sanshi) <sanshi0815@tom.com>
// | Author: 白家昌<baijc2004cn@126.com>
// +----------------------------------------------------------------------

/**
 * 单个文件上传
 * @name    Upload
 * @see  
 * @version	1.0.0 (Mon Nov 24 15:35:13 CST 2008)
 * @author	Mirze
 */
 
class UploadOne
{
	//设置文件上传的最大量 单位是k
	var $uploadFileFize = 2000;
	var $tempFileName = '';
	var $uploadFileName = '';
	var $allowFile = array();
	var $io = "";
	var $isDir = false;
	var $ext_name = ''; //文件扩展名
	/**
	 * (说明) 图片类型数组: exif_imagetype() 
	 * @access public
	 */
	var $arr_exif_imagetype;
	
   /**
	* 构造函数
	* @return void 
	* @access public
	*/
	public function __construct()
	{
		$this->UploadOne();
	}
	function UploadOne()
	{
		$this->io = Factory::getBaseClass("FileIO");
		//计算最大上传数量
		$this->uploadFileFize = $this->uploadFileFize * 1024;
		//设置同意上传类型
		$this->allowFile = array('xls','txt','jpg','jpeg','bmp','png','rar','zip','doc','xls','ppt','pdf','vsd','wps','et','dps','docx');
		
	}
	function set()
	{
		
	}
	/**
	 * 初步过滤
	 * @param  $fileField     上传的字段名
	 * */
	function init($fileField)
	{
		//
		if(!isset($_FILES[$fileField])) {
			return true;
		}
		$files = $_FILES[$fileField]; //图片信息数组
		$fileName = $files['name'];  //图片名称
		$fileTemp = $files['tmp_name']; //临时文件名
		$fileSize = $files['size'];   //文件大小

		$uploadFileType  = $this->io->getFileType($fileName); //取得文件类型
		$this->ext_name = $uploadFileType;
		if(!in_array($uploadFileType, $this->allowFile))
		{
			//上传类型不匹配
			//alertMsg('-2020');
			return '-2020';
		}

		if($fileSize > ($this->uploadFileFize))
		{
			//文件超大
			//alertMsg('-2021');
			return '-2021';
		}

		$this->uploadFileName = $fileName;
		$this->tempFileName = $fileTemp ;

		return true;
	}
	
	/**
	 * 检查文件尺寸宽高超限
	 * @param int def_width 最大宽度
	 * @param int def_height 最大高度
	 * */
	function check_wh($def_width = 178, $def_height = 119) {
		list($width,$height) = getimagesize($this->tempFileName);
		if($width > $def_width || $height > $def_height) {
			return '-900025';
		}
		return true;
	}
	
	/**
	 * 真是上传动作
	 * @param  $upLoadDir    上传路径
	 * @param  string file_no 文件名
	 * @param  int is_new 是否使用新文件名: 1 默认使用 0 不使用
	 * @param  int re_url 返回文件名称还是文件的地址  0 文件名称 1为地址
	 * */
	function exec_upload($upLoadDir='', $file_no='', $re_url=0 ,$is_new = 1)
	{
		//判断上传文件给的路径是否有结束符号
		if(substr($upLoadDir,0,-1)!="/") $upLoadDir.'/';
		//判断目标文件是否为空
		if(empty($this->tempFileName)) return false;

		//获取生成新文件名
		$uploadFileType = $this->io->getFileType($this->uploadFileName); //扩展名
		switch(intval($is_new)) {
			case 0: //原文件名
				$file_name = $this->uploadFileName;			
			    break;
			case 2: //自定义文件名
				$file_name = empty($file_no) ? $this->getUploadFileName($file_name) : trim($file_no);
			    break;
			default: //获取时间为文件名
				$file_name = $this->getUploadFileName($file_name);
		}
		$file_name_url = $upLoadDir.$file_name; //文件全路径
		if (!empty($re_url)) {
			$file_name = $file_name_url;
		}
		if($this->io->copyFile($this->tempFileName,$file_name_url))
		{
			return $file_name;
		} else
		{
		    return false;
		}
	}
	//取得上传文件名
	function getUploadFileName($uploadFile)
	{
		list($usec, $sec) = explode(" ", microtime());
		$name = '';
		if($this->isDir)
			$name .= date('Y-m/').date("Y-m-d-H-i-s")."-".$this->chinaEncode($uploadFile);
		else
			$name .= date("Y-m-d-H-i-s")."-".$this->chinaEncode($uploadFile);
		return $name;
	}
	//中文编码
	function chinaEncode($str)
	{
		/*
		$len = strlen($str);
		$temp = "";
		for ($i=0;$i<$len;$i++)
		{
			$code = substr($str,$i,1);
			$chr = ord($code);
			if($chr>=161 && $chr<=255)
			{
				$temp .= 'c_'.$chr."_c";
			}else{
				$temp .= $code;
			}	
		}
		return $temp;
		*/
		return mt_rand(0,10000) . '.' . $this->get_ext_name();
	}
	
	//获取文件扩展名
	function get_ext_name()
	{
		return $this->ext_name;
	}

	/**
	 * (功能描述) 获取文件名称
	 *
	 * @param string filePath 文件绝对路径
	 * @return
	 */
	public function get_pathinfo($filePath)
	{
		if(empty($filePath)) {
			return $filePath;
		}
		$res = pathinfo($filePath);
		return $res['basename'];
	}

	/**
	 * (功能描述) 获取图片类型数组： exif_imagetype() 
	 *
	 * @param 
	 * @return
	 */
	public function get_imagetype_arr()
	{
		$tmp_arr = array(
			'IMAGETYPE_GIF',
			'IMAGETYPE_JPEG',
			'IMAGETYPE_PNG',
			'IMAGETYPE_SWF',
			'IMAGETYPE_PSD',
			'IMAGETYPE_BMP',
			'IMAGETYPE_TIFF_II',
			'IMAGETYPE_TIFF_MM',
			'IMAGETYPE_JPC',
			'IMAGETYPE_JP2',
			'IMAGETYPE_JPX',
			'IMAGETYPE_JB2',
			'IMAGETYPE_SWC',
			'IMAGETYPE_IFF',
			'IMAGETYPE_WBMP',
			'IMAGETYPE_XBM'
		);
		return $tmp_arr;
	}

}
?>